www.gusucode.com > vc++ 远程控制示例源程序-源码程序 > vc++ 远程控制示例源程序-源码程序\code\PeerYouS\PeerRegeditCtrl.cpp
//Download by http://www.NewXing.com // PeerRegeditCtrl.cpp: implementation of the PeerRegeditCtrl. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "PeerRegeditCtrl.h" #include "command.h" #include "peersocket.h" #include "peerthread.h" ////////把字符串主键转换成主键句柄///////////// HKEY GetPeerRegKey(char* keystr) { HKEY hKey; if(strcmp(keystr,"HKEY_CLASSES_ROOT")==0) hKey=HKEY_CLASSES_ROOT; if(strcmp(keystr,"HKEY_CURRENT_CONFIG")==0) hKey=HKEY_CURRENT_CONFIG; if(strcmp(keystr,"HKEY_CURRENT_USER")==0) hKey=HKEY_CURRENT_USER; if(strcmp(keystr,"HKEY_LOCAL_MACHINE")==0) hKey=HKEY_LOCAL_MACHINE; if(strcmp(keystr,"HKEY_USERS")==0) hKey=HKEY_USERS; return hKey; } /////枚举键值////// bool PeerRegeditEnumValue(SOCKET s,WSAEVENT hEvent) { DWORD retLen; DWORD namelen; DWORD datalen; DWORD index; HKEY hRootKey,hKey; REGEDIT regValue; //////////取得枚举注册表所需的信息,主键,子键/////////// if(!PeerRecvDataS(s,(char*)®Value,sizeof(regValue),&retLen, hEvent,SENDRECV_TIMEOUT)) { return false; } //////////转换主键名到主键句柄///////////// if(!(hRootKey=GetPeerRegKey(regValue.key))) { return false; } //////////打开相应子键,取得句柄////////////// if(RegOpenKey(hRootKey,regValue.sunkey,&hKey)!=ERROR_SUCCESS) { return false; } namelen=256;datalen=512; /////检索键的缺省项值,并做相应处理///////////////// memset((char*)®Value,0,sizeof(regValue)); if(RegQueryValueEx(hKey,"",NULL,®Value.type,regValue.data,&datalen) !=ERROR_SUCCESS) { strcpy((char*)regValue.data,"(数据未设项)"); regValue.datalen=strlen("(数据未设项)")+1;; regValue.type=REG_SZ; } else { regValue.datalen=datalen; } strcpy(regValue.value,"(默认)"); /////////发送值//////////////////// PeerSendDataS(s,(char*)®Value,sizeof(regValue),&retLen,hEvent, SENDRECV_TIMEOUT); //////////////枚举键的项值并发送/////////////// namelen=256;datalen=512;index=0; memset((char*)®Value,0,sizeof(regValue)); while(RegEnumValue(hKey,index,regValue.value,&namelen,NULL, ®Value.type,regValue.data,&datalen)!=ERROR_NO_MORE_ITEMS) { regValue.datalen=datalen; if(strlen(regValue.value)!=0) { PeerSendDataS(s,(char*)®Value,sizeof(regValue),&retLen, hEvent,SENDRECV_TIMEOUT); if(GetLastError()==PEER_FUNERROR) break; } memset((char*)®Value,0,sizeof(regValue)); namelen=256;datalen=512; index++; } RegCloseKey(hKey); return true; } /////枚举子键////// bool PeerRegeditEnumKey(SOCKET s,WSAEVENT hEvent) { DWORD retLen; DWORD namelen; DWORD index; HKEY hRootKey,hKey; REGEDIT regKey; //////////取得枚举注册表所需的信息,主键,子键/////////// if(!PeerRecvDataS(s,(char*)®Key,sizeof(regKey),&retLen, hEvent,SENDRECV_TIMEOUT)) { return false; } //////////转换主键名到主键句柄///////////// if(!(hRootKey=GetPeerRegKey(regKey.key))) { return false; } //////////打开相应子键,取得句柄////////////// if(RegOpenKey(hRootKey,regKey.sunkey,&hKey)!=ERROR_SUCCESS) { return false; } namelen=256;index=0; memset(®Key,0,sizeof(regKey)); HKEY childkey; char childkeyvalue[256]; DWORD childkeylen;childkeylen=256; while(RegEnumKey(hKey,index,regKey.sunkey,namelen)!=ERROR_NO_MORE_ITEMS) { //////////检查键key是否还有子键,有则在regKey.havechild中标志// if(RegOpenKey(hKey,regKey.sunkey,&childkey)==ERROR_SUCCESS) { if(RegEnumKey(childkey,0,childkeyvalue,childkeylen) ==ERROR_SUCCESS) regKey.havechild=1; else regKey.havechild=0; } else { regKey.havechild=0; RegCloseKey(childkey); } //////////发送枚举到的子键///////////////////// PeerSendDataS(s,(char*)®Key,sizeof(regKey),&retLen,hEvent, SENDRECV_TIMEOUT); if(GetLastError()==PEER_FUNERROR) break; index++; } RegCloseKey(hKey); return true; } ////////创建子键/////////////// bool PeerRegeditCreateKey(SOCKET s,WSAEVENT hEvent) { DWORD retLen; REGEDIT regKey; HKEY hRootKey,hMakeKey; ///////////得到要创建的键名//////////////// if(!PeerRecvDataS(s,(char*)®Key,sizeof(regKey),&retLen, hEvent,SENDRECV_TIMEOUT)) { return false; } //////////转换主键名到主键句柄///////////// if(!(hRootKey=GetPeerRegKey(regKey.key))) { return false; } if(RegCreateKey(hRootKey,regKey.sunkey,&hMakeKey)!=ERROR_SUCCESS) return false; /////////发回确认信息///////////////// COMMAND cmd; memset(&cmd,0,sizeof(cmd)); cmd.CommandID=PEER_OK; if(!PeerSendDataS(s,(char*)&cmd,sizeof(cmd),&retLen,hEvent, SENDRECV_TIMEOUT)) { return false; } RegCloseKey(hMakeKey); return true; } ////////删除子键/////////////// bool PeerRegeditDeleteKey(SOCKET s,WSAEVENT hEvent) { DWORD retLen; REGEDIT regKey; HKEY hRootKey; ///////////得到要创建的键名//////////////// if(!PeerRecvDataS(s,(char*)®Key,sizeof(regKey),&retLen, hEvent,SENDRECV_TIMEOUT)) { return false; } //////////转换主键名到主键句柄///////////// if(!(hRootKey=GetPeerRegKey(regKey.key))) { return false; } //////////删除指定键//////////////////////// if(RegDeleteKey(hRootKey,regKey.sunkey)!=ERROR_SUCCESS) return false; /////////发回确认信息///////////////// COMMAND cmd; memset(&cmd,0,sizeof(cmd)); cmd.CommandID=PEER_OK; if(!PeerSendDataS(s,(char*)&cmd,sizeof(cmd),&retLen,hEvent, SENDRECV_TIMEOUT)) { return false; } return true; } ////////得到键的某项值///////// bool PeerRegeditGetValue(SOCKET s,WSAEVENT hEvent) { DWORD retLen; REGEDIT regKey; HKEY hRootKey,hGetKey; ///////////得到要创建的键名//////////////// if(!PeerRecvDataS(s,(char*)®Key,sizeof(regKey),&retLen, hEvent,SENDRECV_TIMEOUT)) { return false; } //////////转换主键名到主键句柄///////////// if(!(hRootKey=GetPeerRegKey(regKey.key))) { return false; } COMMAND cmd; memset(&cmd,0,sizeof(cmd)); if(RegOpenKey(hRootKey,regKey.sunkey,&hGetKey)!=ERROR_SUCCESS) return false; else { DWORD datalen=512; if(RegQueryValueEx(hGetKey,regKey.value,NULL,®Key.type, regKey.data,&datalen)!=ERROR_SUCCESS) return false; regKey.datalen=datalen; } /////////发回得到的键的项的值///////////////// if(!PeerSendDataS(s,(char*)®Key,sizeof(regKey),&retLen,hEvent, SENDRECV_TIMEOUT)) { return false; } RegCloseKey(hGetKey); return true; } ////////创建/设置键的某项值//// bool PeerRegeditSetValue(SOCKET s,WSAEVENT hEvent) { DWORD retLen; REGEDIT regKey; HKEY hRootKey,hSetKey; ///////////得到要创建的键名//////////////// if(!PeerRecvDataS(s,(char*)®Key,sizeof(regKey),&retLen, hEvent,SENDRECV_TIMEOUT)) { return false; } //////////转换主键名到主键句柄///////////// if(!(hRootKey=GetPeerRegKey(regKey.key))) { return false; } if(RegOpenKey(hRootKey,regKey.sunkey,&hSetKey)!=ERROR_SUCCESS) return false; else { DWORD datalen=512; if(RegSetValueEx(hSetKey,regKey.value,NULL,regKey.type, regKey.data,regKey.datalen)!=ERROR_SUCCESS) return false; } /////////发回确认信息///////////////// COMMAND cmd; memset(&cmd,0,sizeof(cmd)); cmd.CommandID=PEER_OK; if(!PeerSendDataS(s,(char*)&cmd,sizeof(cmd),&retLen,hEvent, SENDRECV_TIMEOUT)) { return false; } RegCloseKey(hSetKey); return true; } ////////删除键的某项/////////// bool PeerRegeditDelValue(SOCKET s,WSAEVENT hEvent) { DWORD retLen; REGEDIT regKey; HKEY hRootKey,hDelKey; ///////////得到要创建的键名//////////////// if(!PeerRecvDataS(s,(char*)®Key,sizeof(regKey),&retLen, hEvent,SENDRECV_TIMEOUT)) { return false; } //////////转换主键名到主键句柄///////////// if(!(hRootKey=GetPeerRegKey(regKey.key))) { return false; } if(RegOpenKey(hRootKey,regKey.sunkey,&hDelKey)!=ERROR_SUCCESS) return false; else { DWORD datalen=512; if(RegDeleteValue(hDelKey,regKey.value)!=ERROR_SUCCESS) return false; } /////////发回确认信息///////////////// COMMAND cmd; memset(&cmd,0,sizeof(cmd)); cmd.CommandID=PEER_OK; if(!PeerSendDataS(s,(char*)&cmd,sizeof(cmd),&retLen,hEvent, SENDRECV_TIMEOUT)) { return false; } RegCloseKey(hDelKey); return true; }